package com.example.demo.reflect.cglib;

import org.springframework.cglib.proxy.Enhancer;

/**
 * @author void
 * @date 2022/2/17 14:57
 * @desc
 * 1.生成代理类Class的二进制字节码；
 * 2.通过Class.forName加载二进制字节码，生成Class对象；
 * 3.通过反射机制获取实例构造，并初始化代理类对象。
 */
public class CglibTest {

    public static void main(String[] args) {
        System.out.println("***************");
        CglibTest test = new CglibTest();
        Target proxyTarget = (Target) test.createProxy(Target.class);
        String res = proxyTarget.execute();
//        System.out.println(res);
    }
    
    public Object createProxy(Class targetClass){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(targetClass);
        enhancer.setCallback(new MyMethodInterceptor());
        return enhancer.create();
    }
}
